import request from '@/utils/request'
import {
  AdminAddStudentParams,
  GetStudentInfoByIdRes,
  AdminUpadeStudentParams,
  AdminGetStudentRes,
} from './type'
import { AxiosResponse } from 'axios'
import qs from 'qs'
import { BasePageQuery } from '../teacher/type'

// 项目用户相关的请求地址
enum Student_API {
  POST_ADD_STUDENT_PAGE = '/teaching_system/stu/addStu',
  GET_STUDENT_PAGE = '/teaching_system/stu/getAllStu',
  GET_STUDENT_BYID = '/teaching_system/stu/getById/{stuId}',
  DELETE_STUDENT_BYID = '/teaching_system/stu/deleteStu/{stuId}',
  PUT_UPDATE_STUDENT = '/teaching_system/stu/updateStu',
}

/**
 * 添加学生
 * @param {object} params 新增学生
 * @param {number} params.studentId 学生学号
 * @param {string} params.name 学生姓名
 * @param {string} params.gender 学生性别(male/female)
 * @param {object} params.birthday 学生生日
 * @param {string} params.department 学生学院
 * @param {string} params.major 学生专业
 * @param {object} params.enrollDate 学生注册时间
 * @param {string} params.phone 学生电话号码
 * @param {string} params.address 学生地址
 * @param {string} params.idCard 学生身份证号
 * @param {string} params.sclass
 * @returns
 */
export const adminAddStudent = (params: AdminAddStudentParams) =>
  request.post<any, AxiosResponse<any>>(
    Student_API.POST_ADD_STUDENT_PAGE,
    params,
  )

/**
 * 删除学生
 * @param {string} stuId
 * @returns
 */
export const adminDeleteStudent = (id: number) =>
  request.delete<any, AxiosResponse<any>>(
    Student_API.DELETE_STUDENT_BYID.replace('{stuId}', id.toString()),
  )

/**
 * 获取学生列表
 * @param {string} pageNum 页码
 * @param {string} pageSize 每页记录数
 * @returns
 */
export const adminGetStudent = (params: BasePageQuery) =>
  request.get<any, AxiosResponse<AdminGetStudentRes>>(
    Student_API.GET_STUDENT_PAGE + '?' + qs.stringify(params),
  )

/**
 * 根据id获得学生信息
 * @param {string} stuId A
 * @returns
 */
export const getStudentInfoById = (stuId: number) =>
  request.get<any, AxiosResponse<GetStudentInfoByIdRes>>(
    Student_API.GET_STUDENT_BYID.replace('{stuId}', stuId.toString()),
  )

/**
 * 修改学生
 * @param {object} params UpdateStuForm
 * @param {number} params.studentId 学生学号
 * @param {string} params.name 学生姓名
 * @param {string} params.gender 学生性别
 * @param {object} params.birthday 学生生日
 * @param {string} params.department 学生学院
 * @param {string} params.major 学生专业
 * @param {object} params.enrollDate 学生注册时间
 * @param {string} params.phone 学生电话号码
 * @param {string} params.address 学生地址
 * @param {string} params.idCard 学生身份证号
 * @param {string} params.sclass
 * @returns
 */
export const adminUpadeStudent = (params: AdminUpadeStudentParams) =>
  request.post<any, AxiosResponse<string>>(
    Student_API.PUT_UPDATE_STUDENT,
    params,
  )
